"""
处理引擎
    处理流程：
        DataProcess -->  数据处理
            |
        ComponentManager  -->  生成管理
            |
        ManageEvent   -->  事件管理
"""
import settings
import time
from read_func import DataProcess
from midd_creat_component import ComponentManager
from midd_event_manage import ManageEvent
from PySide6.QtCore import QObject, Signal
import os

"""引擎工作者"""
class EngineWorker(QObject):
    finished = Signal()                                      # 线程完成函数
    data_success = Signal(bool)                              # 数据处理成功信号（flase处理失败）
    component_success = Signal(bool)                         # 组件生成成功信号（flase生成失败）
    start_engine = Signal(int)                               # 引擎开始信号（flase启动失败）

    def __init__(self, file_path):
        super().__init__()
        self.file_path = file_path                           # 运行文件地址
        self.events = None

    def data_process(self):
        """数据处理"""
        try:
            print('开始数据处理')
            data_process = DataProcess(self.file_path)
            self.data_success.emit(True)
            return data_process()
        except:
            self.data_success.emit(False)

    def component_manager(self, data):
        """组件管理"""
        try:
            print('开始组件管理')
            component_manager = ComponentManager(data)
            self.component_success.emit(True)
            return component_manager()
        except:
            print('组件管理失败')
            self.component_success.emit(False)

    def start(self):
        """开始执行"""
        data = self.data_process()                             # 数据处理
        self.events = self.component_manager(data)             # 组件管理生成事件
        print(f'处理后的数据{data}')
        self.start_engine.emit(3)                              # 开始倒计时
        time.sleep(1)
        self.start_engine.emit(2)
        time.sleep(1)
        self.start_engine.emit(1)
        time.sleep(1)
        self.start_engine.emit(0)

        time.sleep(1)
        me = ManageEvent(self.events)
        me.start()
        self.finished.emit()                                   # 执行完成


if __name__ == '__main__':
    file_path = os.path.join(settings.USER_PATH, '测试数据.json')
    ew = EngineWorker(file_path)
    ew.start()